package com.docmgmt.mvp.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 知识库文件映射实体（v3.0核心变更）
 *
 * 架构变更：v2.0的folder→KB (1:1) 改为 v3.0的file→KB (M:N)
 * - 单一物理知识库：company_main_kb
 * - 一个文件可以属于多个逻辑知识库（通过视图构建）
 * - 文件在RAGFlow中只存储一份（通过ragflow_doc_id复用）
 *
 * @TableName kb_file_mapping
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("kb_file_mapping")
public class KbFileMappingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 知识库ID */
    @TableField("kb_id")
    private Long kbId;

    /** 文件ID */
    @TableField("file_id")
    private Long fileId;

    /** 文件在KB中的状态：active/deleted/pending_cleanup */
    @TableField("file_status")
    private String fileStatus;

    /** 添加人ID */
    @TableField("added_by")
    private Long addedBy;

    /** 添加到KB的时间 */
    @TableField("added_at")
    private LocalDateTime addedAt;

    /** 更新时间 */
    @TableField("updated_at")
    private LocalDateTime updatedAt;

    /** 软删除时间（30天后物理删除） */
    @TableField("deleted_at")
    private LocalDateTime deletedAt;

    /** 文件删除时是否自动从知识库移除（v3.0新增） */
    @TableField("auto_remove_on_delete")
    private Boolean autoRemoveOnDelete;

    /** 如果是文件夹，是否包含子文件（v3.0新增） */
    @TableField("include_children")
    private Boolean includeChildren;
}
